Collaboration and augmentation are the foundational principles of innovation. — Vaclav Smil
在 [Day 09] 建立機器學習模型 — Andrew Ng 大神說要這樣做 文章中,提到了資料本位模型開發的概念,它的中心思想就是藉由優化資料的品質來提升模型的表現。
而在昨天的文章中我們學會了如何利用錯誤分析找出模型的缺點在哪,今天我們就來談談如何以資料本位的方式來對症下藥改善模型吧。
資料增強 (Data Augmentation) 是改善資料的一個好方法,而在挑選要對哪部份資料做增強或進一步收集時,有一個很重要的心智圖像 — 彈力帶效應:
*圖片修改自 MLEP — A useful picture of data augmentation
以語音辨識為例,音檔中會存在各種不同的噪音,而噪音間會有一些相對關係 (機械音 vs. 人聲),因此在下圖 X 軸代表的輸入空間中,相似的機械音會聚集在一側,而人聲則聚集在另一側。
各種噪音情境下的模型表現則散佈在 Y 軸上,並以曲線連接起來代表模型在所有情況的表現,而這條曲線可以想像成彈力帶,Model 曲線與 HLP 曲線之間的差距便是可以改善的空間。
假設模型在有人聲的情況表現比較差,若我們對咖啡廳噪音做資料增強,大幅提昇了在此情況下的模型表現,這時候模型的整體表現其實會像彈力帶的一個點被拉起來一樣,附近甚至更遠的彈力帶都會跟著被拉起來。
也就是說,各種情境的模型表現都會提昇,而相似情境的表現則會跟著大幅提昇。
這個概念特別適用於非結構化資料,因此在計畫資料增強時,可以先從進步空間最大的資料進行改善,再經由錯誤分析找出下一個進步空間最大的位置,如此逐點反覆進步其實是最有效率的作法。
雖然資料增強可以有效率地增加資料量 (特別是對於非結構化資料來說),但在執行時有很多選項,為了創造出模型真的能夠學習的資料,必須遵守以下準則:
創造 (i)在模型表現很差,但 (ii)在人類表現水平或其他 baseline 表現很好的擬真資料。
也就是說,經由資料增強產生的資料必須對模型有挑戰性,但不能完全無法辨認。
而資料增強最糟的作法就是不斷 Trial & error,浪費一堆時間重新訓練,所以要以上述準則作為健全性測試,檢視以下三點:
以圖像資料增強為例,除了翻轉、調整對比以外,只要符合準則,就算 PhotoShop 也是沒問題的。
雖然資料增強是最常被用來提升模型表現的手段之一,但一般來說,初始訓練、驗證、測試集的分佈應該會差不多。
這時候細心的孩子可能會想到,經過資料增強,某一類的資料量被提昇了,導致訓練集的分佈改變,這樣會傷害模型表現嗎?
其實對非結構化資料來說,如果模型夠大 (Bias 較低) 且 X→Y 映射夠清楚,那就沒關係。
但如果模型比較小,大幅增加某類資料會使它花費過多資源在學習那類資料上,導致在其他類資料的表現下降。
而映射不清楚的問題反而較少發生,以台灣車牌 OCR 為例:
民國 80 年代初期的車牌是有包含英文字母 I 的,因為目前比較少見了,所以資料量理應當較少,模型表現在辨認上可能也較差,但如果因此增強了 I 的資料,可能會讓最右邊這種更新式車牌的 1 被判斷成 I,但實際上猜 1 是比較合理的。
結構化資料任務的資料集大小相對固定 (像是鐵達尼號上面就這些人),要創造或收集全新的資料很困難,因此可以改為對現有訓練集進行特徵工程來增加特徵 (features)。
結構化資料在錯誤分析時較難以 HLP 作為 baseline,可以改為參考使用者回饋或與競爭者比較以找出該增加哪
些特徵。
以餐廳推薦系統為例,經過錯誤分析,發現素食者常被推薦肉肉餐廳,但很難憑空創造使用者或餐廳的資料,所以只能增加有幫助的特徵:
增加的特徵不必是 0、1,也可以是另一個模型根據現有資料的預測結果。
*圖片來源:Week 1 – Lecture: History, motivation, and evolution of Deep Learning
上圖是大神 Yann LeCun 對機器學習與深度學習之差別的解釋,這也讓很多人 (包括我自己) 都誤會只要使用深度學習模型就不需要再做特徵工程,雖然不用再手動設計特徵是深度學習的一個優勢,但如果資料集很小,經由錯誤分析來設計特徵還是很有幫助的,特別是對結構化資料來說,因此不可以排斥特徵工程!
(非結構化資料不做倒是比較沒關係)
好啦,以上就是今天的內容,Modeling 的內容也接近尾聲了,明天見!